广çãªJavaScriptãã¹ãã®ããã®Jestèšå®ãšã«ã¹ã¿ã ãããã£ãŒäœæã®å æ¬çã¬ã€ããã°ããŒãã«ãããžã§ã¯ãã«ãããã³ãŒãå質ãšä¿¡é Œæ§ãä¿èšŒããŸãã
JavaScriptãã¹ãã®ç¿åŸïŒå ç¢ãªã¢ããªã±ãŒã·ã§ã³ã®ããã®Jestèšå®ãšã«ã¹ã¿ã ãããã£ãŒ
仿¥ã®æ¥éã«é²åãããœãããŠã§ã¢æ¥çã«ãããŠãå ç¢ã§ä¿¡é Œæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ã¯æéèŠã§ãããã®ãããªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®åºç€ãšãªãã®ãã广çãªãã¹ãã§ããJavaScriptã¯ããã³ããšã³ããšããã¯ãšã³ãã®äž¡éçºã§äž»èŠãªèšèªã§ããã匷åã§å€æ©èœãªãã¹ããã¬ãŒã ã¯ãŒã¯ãå¿ èŠãšããŸããFacebookã«ãã£ãŠéçºãããJestã¯ããŒãã³ã³ãã£ã®ã¥ã¬ãŒã·ã§ã³ã®ã»ããã¢ããã匷åãªã¢ããã³ã°æ©èœãåªããããã©ãŒãã³ã¹ãæäŸããäž»èŠãªéžæè¢ãšããŠæµ®äžããŠããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ãJestèšå®ã®è€éãªéšåãæãäžããã«ã¹ã¿ã ãããã£ãŒã®äœæãæ¢æ±ããŸããããã«ãããå Žæããããžã§ã¯ãã®èŠæš¡ã«é¢ããããJavaScriptã³ãŒãã®å質ãšä¿¡é Œæ§ãä¿èšŒããããã衚çŸåè±ãã§ä¿å®æ§ã®é«ããã¹ããäœæã§ããããã«ãªããŸãã
ãªãJestãªã®ãïŒJavaScriptãã¹ãã®ã°ããŒãã«ã¹ã¿ã³ããŒã
èšå®ãã«ã¹ã¿ã ãããã£ãŒã«é£ã³èŸŒãåã«ããªãJestãäžçäžã®JavaScriptéçºè ã«ãšã£ãŠå®çªã®ãã¬ãŒã ã¯ãŒã¯ã«ãªã£ãã®ããçè§£ããŸãããïŒ
- ãŒãã³ã³ãã£ã®ã¥ã¬ãŒã·ã§ã³ïŒ Jestã¯éåžžã«ç°¡åãªã»ããã¢ãããèªããæå°éã®èšå®ã§ãã¹ããæžãå§ããããšãã§ããŸããããã¯ããã¹ãé§åéçºïŒTDDïŒãããã€ãã¢é§åéçºïŒBDDïŒã®å®è·µãæ¡çšããŠããããŒã ã«ãšã£ãŠç¹ã«æçã§ãã
- é«éãã€å¹ççïŒ Jestã®äžŠåãã¹ãå®è¡ãšãã£ãã·ã³ã°ã¡ã«ããºã ã¯ãè¿ éãªãã¹ããµã€ã¯ã«ã«è²¢ç®ããéçºäžã«çŽ æ©ããã£ãŒãããã¯ãæäŸããŸãã
- çµã¿èŸŒã¿ã®ã¢ããã³ã°ïŒ Jestã¯åŒ·åãªã¢ããã³ã°æ©èœãæäŸããã³ãŒãã®ãŠããããåé¢ãã广çãªãŠããããã¹ãã®ããã«äŸåé¢ä¿ãã·ãã¥ã¬ãŒãããããšãã§ããŸãã
- ã¹ãããã·ã§ãããã¹ãïŒ Jestã®ã¹ãããã·ã§ãããã¹ãæ©èœã¯ãUIã³ã³ããŒãã³ããããŒã¿æ§é ã®æ€èšŒããã»ã¹ãç°¡çŽ åããäºæãã¬å€æŽã容æã«æ€åºã§ããããã«ããŸãã
- åªããããã¥ã¡ã³ããšã³ãã¥ããã£ãµããŒãïŒ Jestã¯å æ¬çãªããã¥ã¡ã³ããšæŽ»çºãªã³ãã¥ããã£ãæã£ãŠãããå¿ èŠãªæã«çããèŠã€ãããå©ããåŸããããã®ãç°¡åã§ããããã¯ã倿§ãªç°å¢ã§åãäžçäžã®éçºè ã«ãšã£ãŠéåžžã«éèŠã§ãã
- å¹ åºãæ¡çšå®çžŸïŒ ã¹ã¿ãŒãã¢ããããå€§äŒæ¥ãŸã§ãäžçäžã®äŒæ¥ãJavaScriptã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãã«Jestãå©çšããŠããŸãããã®åºç¯ãªæ¡çšããç¶ç¶çãªæ¹åãšè±å¯ãªãªãœãŒã¹ãä¿èšŒããŠããŸãã
Jestã®èšå®ïŒãã¹ãç°å¢ã®ã«ã¹ã¿ãã€ãº
Jestã¯ãŒãã³ã³ãã£ã®ã¥ã¬ãŒã·ã§ã³ã§å©çšã§ããŸããããããžã§ã¯ãã®ç¹å®ã®ããŒãºã«åãããŠã«ã¹ã¿ãã€ãºããããšããã°ãã°å¿ èŠã«ãªããŸããJestãèšå®ããäž»ãªæ¹æ³ã¯ããããžã§ã¯ãã®ã«ãŒãã«ãã `jest.config.js` ãã¡ã€ã«ïŒTypeScriptã䜿çšããŠããå Žå㯠`jest.config.ts`ïŒã䜿çšããããšã§ããããã€ãã®äž»èŠãªèšå®ãªãã·ã§ã³ãèŠãŠãããŸãããïŒ
`transform`: ã³ãŒãã®ãã©ã³ã¹ãã€ã«
`transform` ãªãã·ã§ã³ã¯ãJestããã¹ããå®è¡ããåã«ãœãŒã¹ã³ãŒããã©ã®ããã«å€æããããæå®ããŸããããã¯ãææ°ã®JavaScriptæ©èœãJSXãTypeScriptããŸãã¯ãã®ä»ã®éæšæºæ§æãæ±ãäžã§éåžžã«éèŠã§ããéåžžããã©ã³ã¹ãã€ã«ã«ã¯Babelã䜿çšããŸãã
äŸïŒ`jest.config.js`ïŒïŒ
module.exports = {
transform: {
'^.+\\.js$': 'babel-jest',
'^.+\\.jsx$': 'babel-jest',
'^.+\\.ts?$': 'ts-jest',
},
};
ãã®èšå®ã¯ã`.js` ããã³ `.jsx` ãã¡ã€ã«ã®å€æã«ã¯ `babel-jest` ãã`.ts` ãã¡ã€ã«ã®å€æã«ã¯ `ts-jest` ã䜿çšããããJestã«æç€ºããŸããå¿ èŠãªããã±ãŒãžïŒ`npm install --save-dev babel-jest @babel/core @babel/preset-env ts-jest typescript`ïŒãã€ã³ã¹ããŒã«ãããŠããããšã確èªããŠãã ãããã°ããŒãã«ããŒã ã®å ŽåãBabelããã¹ãŠã®å°åã§äœ¿çšãããé©åãªECMAScriptããŒãžã§ã³ããµããŒãããããã«èšå®ãããŠããããšã確èªããŠãã ããã
`testEnvironment`: å®è¡ã³ã³ããã¹ãã®ã·ãã¥ã¬ãŒã·ã§ã³
`testEnvironment` ãªãã·ã§ã³ã¯ããã¹ããå®è¡ãããç°å¢ãæå®ããŸããäžè¬çãªãªãã·ã§ã³ã«ã¯ã`node`ïŒããã¯ãšã³ãã³ãŒãçšïŒãš `jsdom`ïŒDOMãšå¯Ÿè©±ããããã³ããšã³ãã³ãŒãçšïŒããããŸãã
äŸïŒ`jest.config.js`ïŒïŒ
module.exports = {
testEnvironment: 'jsdom',
};
`jsdom` ã䜿çšãããšããã©ãŠã¶ç°å¢ãã·ãã¥ã¬ãŒããããReactã³ã³ããŒãã³ããDOMã«äŸåããä»ã®ã³ãŒãããã¹ãã§ããŸããNode.jsããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ãããã¯ãšã³ããã¹ãã«ã¯ã`node` ãæšå¥šãããéžæè¢ã§ããåœéåãããã¢ããªã±ãŒã·ã§ã³ãæ±ãéã¯ã`testEnvironment` ã察象èªè ã«é¢é£ãããã±ãŒã«èšå®ãæ£ããã·ãã¥ã¬ãŒãããããšã確èªããŠãã ããã
`moduleNameMapper`: ã¢ãžã¥ãŒã«ã€ã³ããŒãã®è§£æ±º
`moduleNameMapper` ãªãã·ã§ã³ã䜿çšãããšãã¢ãžã¥ãŒã«åãç°ãªããã¹ã«ãããã³ã°ã§ããŸããããã¯ãã¢ãžã¥ãŒã«ã®ã¢ãã¯ã絶察ã€ã³ããŒãã®åŠçããŸãã¯ãã¹ãšã€ãªã¢ã¹ã®è§£æ±ºã«åœ¹ç«ã¡ãŸãã
äŸïŒ`jest.config.js`ïŒïŒ
module.exports = {
moduleNameMapper: {
'^@components/(.*)$': '/src/components/$1',
},
};
ãã®èšå®ã¯ã`@components/` ã§å§ãŸãã€ã³ããŒãã `src/components` ãã£ã¬ã¯ããªã«ãããã³ã°ããŸããããã«ãããã€ã³ããŒããç°¡çŽ åãããã³ãŒãã®å¯èªæ§ãåäžããŸããã°ããŒãã«ãããžã§ã¯ãã§ã¯ã絶察ã€ã³ããŒãã䜿çšããããšã§ãç°ãªããããã€ç°å¢ãããŒã æ§é éã§ã®ä¿å®æ§ãåäžããŸãã
`testMatch`: ãã¹ããã¡ã€ã«ã®æå®
`testMatch` ãªãã·ã§ã³ã¯ããã¹ããã¡ã€ã«ãèŠã€ããããã«äœ¿çšããããã¿ãŒã³ãå®çŸ©ããŸããããã©ã«ãã§ã¯ãJest㯠`.test.js`ã`.spec.js`ã`.test.jsx`ã`.spec.jsx`ã`.test.ts`ããŸã㯠`.spec.ts` ã§çµãããã¡ã€ã«ãæ¢ããŸããããããããžã§ã¯ãã®åœåèŠåã«åãããŠã«ã¹ã¿ãã€ãºã§ããŸãã
äŸïŒ`jest.config.js`ïŒïŒ
module.exports = {
testMatch: ['/src/**/*.test.js'],
};
ãã®èšå®ã¯ã`src` ãã£ã¬ã¯ããªãšãã®ãµããã£ã¬ã¯ããªå ã§ `.test.js` ã§çµãããã¹ããã¡ã€ã«ãæ¢ãããJestã«æç€ºããŸãããã¹ããã¡ã€ã«ã®äžè²«ããåœåèŠåã¯ãç¹ã«å€§èŠæš¡ã§åæ£ããããŒã ã«ãããŠãä¿å®æ§ã®ããã«äžå¯æ¬ ã§ãã
`coverageDirectory`: ã«ãã¬ããžåºåã®æå®
`coverageDirectory` ãªãã·ã§ã³ã¯ãJestãã³ãŒãã«ãã¬ããžã¬ããŒããåºåãããã£ã¬ã¯ããªãæå®ããŸããã³ãŒãã«ãã¬ããžåæã¯ããã¹ããã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®éèŠãªéšåãã«ããŒããŠããããšã確èªãã远å ã®ãã¹ããå¿ èŠãªé åãç¹å®ããã®ã«äžå¯æ¬ ã§ãã
äŸïŒ`jest.config.js`ïŒïŒ
module.exports = {
coverageDirectory: 'coverage',
};
ãã®èšå®ã¯ãJestã«ã«ãã¬ããžã¬ããŒãã `coverage` ãšããååã®ãã£ã¬ã¯ããªã«åºåããããæç€ºããŸãã宿çã«ã³ãŒãã«ãã¬ããžã¬ããŒãã確èªããããšã§ãã³ãŒãããŒã¹å šäœã®å質ãåäžããããã¹ããéèŠãªæ©èœãé©åã«ã«ããŒããŠããããšã確èªã§ããŸããããã¯ãåœéçãªã¢ããªã±ãŒã·ã§ã³ã«ãããŠãç°ãªãå°åéã§äžè²«ããæ©èœãšããŒã¿æ€èšŒãä¿èšŒããããã«ç¹ã«éèŠã§ãã
`setupFilesAfterEnv`: ã»ããã¢ããã³ãŒãã®å®è¡
`setupFilesAfterEnv` ãªãã·ã§ã³ã¯ããã¹ãç°å¢ãã»ããã¢ãããããåŸã«å®è¡ãããã¹ããã¡ã€ã«ã®é åãæå®ããŸããããã¯ãã¢ãã¯ã®èšå®ãã°ããŒãã«å€æ°ã®æ§æããŸãã¯ã«ã¹ã¿ã ãããã£ãŒã®è¿œå ã«åœ¹ç«ã¡ãŸããããã¯ãã«ã¹ã¿ã ãããã£ãŒãå®çŸ©ããéã«äœ¿çšãããšã³ããªãã€ã³ãã§ãã
äŸïŒ`jest.config.js`ïŒïŒ
module.exports = {
setupFilesAfterEnv: ['/src/setupTests.js'],
};
ããã«ãããJestã¯ç°å¢ãã»ããã¢ãããããåŸã« `src/setupTests.js` å ã®ã³ãŒããå®è¡ããŸããããã§ã«ã¹ã¿ã ãããã£ãŒãç»é²ããŸããããã«ã€ããŠã¯æ¬¡ã®ã»ã¯ã·ã§ã³ã§èª¬æããŸãã
ãã®ä»ã®äŸ¿å©ãªèšå®ãªãã·ã§ã³
- `verbose`: ã³ã³ãœãŒã«ã«è©³çްãªãã¹ãçµæã衚瀺ãããã©ãããæå®ããŸãã
- `collectCoverageFrom`: ã³ãŒãã«ãã¬ããžã¬ããŒãã«å«ããã¹ããã¡ã€ã«ãå®çŸ©ããŸãã
- `moduleDirectories`: ã¢ãžã¥ãŒã«ãæ€çŽ¢ããããã®è¿œå ãã£ã¬ã¯ããªãæå®ããŸãã
- `clearMocks`: ãã¹ãå®è¡ã®åéã«ã¢ãã¯ãèªåçã«ã¯ãªã¢ããŸãã
- `resetMocks`: åãã¹ãå®è¡ã®åã«ã¢ãã¯ããªã»ããããŸãã
ã«ã¹ã¿ã ãããã£ãŒã®äœæïŒJestã®ã¢ãµãŒã·ã§ã³ã®æ¡åŒµ
Jest㯠`toBe`ã`toEqual`ã`toBeTruthy`ã`toBeFalsy` ã®ãããªè±å¯ãªçµã¿èŸŒã¿ãããã£ãŒãæäŸããŠããŸããããããç¹ã«è€éãªããŒã¿æ§é ããã¡ã€ã³åºæã®ããžãã¯ãæ±ãå Žåãã¢ãµãŒã·ã§ã³ãããæç¢ºãã€ç°¡æœã«è¡šçŸããããã«ã«ã¹ã¿ã ãããã£ãŒãäœæããå¿ èŠãããå ŽåããããŸããã«ã¹ã¿ã ãããã£ãŒã¯ã³ãŒãã®å¯èªæ§ãåäžãããéè€ãæžããããã¹ããçè§£ããããä¿å®ããããããŸãã
ã«ã¹ã¿ã ãããã£ãŒã®å®çŸ©
ã«ã¹ã¿ã ãããã£ãŒã¯ã`received` å€ïŒãã¹ã察象ã®å€ïŒãåãåãã2ã€ã®ããããã£ãæã€ãªããžã§ã¯ããè¿ã颿°ãšããŠå®çŸ©ãããŸãïŒ`pass`ïŒã¢ãµãŒã·ã§ã³ãæåãããã©ããã瀺ãããŒã«å€ïŒãš `message`ïŒã¢ãµãŒã·ã§ã³ãæåãŸãã¯å€±æããçç±ã説æããã¡ãã»ãŒãžãè¿ã颿°ïŒãæ°å€ãç¹å®ã®ç¯å²å ã«ãããã©ããããã§ãã¯ããã«ã¹ã¿ã ãããã£ãŒãäœæããŠã¿ãŸãããã
äŸïŒ`src/setupTests.js`ïŒïŒ
expect.extend({
toBeWithinRange(received, floor, ceiling) {
const pass = received >= floor && received <= ceiling;
if (pass) {
return {
message: () =>
`expected ${received} not to be within range ${floor} - ${ceiling}`,
pass: true,
};
} else {
return {
message: () =>
`expected ${received} to be within range ${floor} - ${ceiling}`,
pass: false,
};
}
},
});
ãã®äŸã§ã¯ã`toBeWithinRange` ãšããã«ã¹ã¿ã ãããã£ãŒãå®çŸ©ããŠããŸããããã¯3ã€ã®åŒæ°ãåããŸãïŒ`received` å€ïŒãã¹ããããæ°å€ïŒã`floor`ïŒæå°å€ïŒããã㊠`ceiling`ïŒæå€§å€ïŒããããã£ãŒã¯ `received` å€ãæå®ãããç¯å²å ã«ãããã©ããããã§ãã¯ãã`pass` ãš `message` ããããã£ãæã€ãªããžã§ã¯ããè¿ããŸãã
ã«ã¹ã¿ã ãããã£ãŒã®äœ¿çš
ã«ã¹ã¿ã ãããã£ãŒãå®çŸ©ããããä»ã®çµã¿èŸŒã¿ãããã£ãŒãšåãããã«ãã¹ãã§äœ¿çšã§ããŸãã
äŸïŒ`src/myModule.test.js`ïŒïŒ
import './setupTests'; // Ensure custom matchers are loaded
describe('toBeWithinRange', () => {
it('passes when the number is within the range', () => {
expect(5).toBeWithinRange(1, 10);
});
it('fails when the number is outside the range', () => {
expect(0).not.toBeWithinRange(1, 10);
});
});
ãã®ãã¹ãã¹ã€ãŒãã¯ã`toBeWithinRange` ã«ã¹ã¿ã ãããã£ãŒã®äœ¿ç𿹿³ã瀺ããŠããŸããæåã®ãã¹ãã±ãŒã¹ã¯ãæ°å€5ã1ãã10ã®ç¯å²å ã«ããããšãã¢ãµãŒããã2çªç®ã®ãã¹ãã±ãŒã¹ã¯ãæ°å€0ãåãç¯å²å ã«ãªãããšãã¢ãµãŒãããŠããŸãã
ããè€éãªã«ã¹ã¿ã ãããã£ãŒã®äœæ
ã«ã¹ã¿ã ãããã£ãŒã¯ãè€éãªããŒã¿æ§é ããã¡ã€ã³åºæã®ããžãã¯ããã¹ãããããã«äœ¿çšã§ããŸããäŸãã°ãé åã«ç¹å®ã®èŠçŽ ã倧æåå°æåãåããã«å«ãŸããŠãããããã§ãã¯ããã«ã¹ã¿ã ãããã£ãŒãäœæããŠã¿ãŸãããã
äŸïŒ`src/setupTests.js`ïŒïŒ
expect.extend({
toContainIgnoreCase(received, expected) {
const pass = received.some(
(item) => item.toLowerCase() === expected.toLowerCase()
);
if (pass) {
return {
message: () =>
`expected ${received} not to contain ${expected} (case-insensitive)`,
pass: true,
};
} else {
return {
message: () =>
`expected ${received} to contain ${expected} (case-insensitive)`,
pass: false,
};
}
},
});
ãã®ãããã£ãŒã¯ã`received` é åãå埩åŠçããèŠçŽ ã®ãããããå°æåã«å€æãããã®ãã`expected` å€ïŒåæ§ã«å°æåã«å€æïŒãšäžèŽãããã©ããããã§ãã¯ããŸããããã«ãããé åã«å¯ŸããŠå€§æåå°æåãåºå¥ããªãã¢ãµãŒã·ã§ã³ãå®è¡ã§ããŸãã
åœéåïŒi18nïŒãã¹ãã®ããã®ã«ã¹ã¿ã ãããã£ãŒ
åœéåãããã¢ããªã±ãŒã·ã§ã³ãéçºããéã«ã¯ãããã¹ãã®ç¿»èš³ãç°ãªããã±ãŒã«éã§æ£ããäžè²«ããŠããããšãæ€èšŒããããšãäžå¯æ¬ ã§ããã«ã¹ã¿ã ãããã£ãŒã¯ãã®ç®çã®ããã«éåžžã«äŸ¡å€ããããŸããäŸãã°ãç¹å®ã®èšèªã«å¯ŸããŠããŒã«ã©ã€ãºãããæååãç¹å®ã®ãã¿ãŒã³ã«äžèŽãããããŸãã¯ç¹å®ã®ããŒã¯ãŒããå«ãã§ãããããã§ãã¯ããã«ã¹ã¿ã ãããã£ãŒãäœæã§ããŸãã
äŸïŒ`src/setupTests.js` - ãã®äŸã§ã¯ãããŒã翻蚳ãã颿°ãæ¢ã«ããããšãåæãšããŠããŸãïŒïŒ
import { translate } from './i18n';
expect.extend({
toHaveTranslation(received, key, locale) {
const translatedString = translate(key, locale);
const pass = received.includes(translatedString);
if (pass) {
return {
message: () => `expected ${received} not to contain translation for key ${key} in locale ${locale}`,
pass: true,
};
} else {
return {
message: () => `expected ${received} to contain translation for key ${key} in locale ${locale}`,
pass: false,
};
}
},
});
äŸïŒ`src/i18n.js` - åºæ¬çãªç¿»èš³ã®äŸïŒïŒ
const translations = {
en: {
"welcome": "Welcome!"
},
fr: {
"welcome": "Bienvenue!"
}
}
export const translate = (key, locale) => {
return translations[locale][key];
};
ãããŠãã¹ãã§ïŒ`src/myComponent.test.js`ïŒïŒ
import './setupTests';
it('should display translated greeting in french', () => {
const greeting = "Bienvenue!";
expect(greeting).toHaveTranslation("welcome", "fr");
});
ãã®äŸã§ã¯ã`Bienvenue!` ããã©ã³ã¹èªã§ã® "welcome" ã®ç¿»èš³å€ã§ãããã©ããããã¹ãããŸããããªãã®ç¹å®ã®åœéåã©ã€ãã©ãªãã¢ãããŒãã«åãã㊠`translate` 颿°ãé©å¿ãããŠãã ãããé©åãªi18nãã¹ãã¯ãããªãã®ã¢ããªã±ãŒã·ã§ã³ã倿§ãªæåçèæ¯ãæã€ãŠãŒã¶ãŒã«é¿ãããšãä¿èšŒããŸãã
ã«ã¹ã¿ã ãããã£ãŒã®å©ç¹
- å¯èªæ§ã®åäžïŒ ã«ã¹ã¿ã ãããã£ãŒã¯ãç¹ã«è€éãªã¢ãµãŒã·ã§ã³ãæ±ãéã«ããã¹ãããã衚çŸåè±ãã§çè§£ããããããŸãã
- éè€ã®åæžïŒ ã«ã¹ã¿ã ãããã£ãŒã䜿çšãããšãå ±éã®ã¢ãµãŒã·ã§ã³ããžãã¯ãåå©çšã§ããã³ãŒãã®éè€ãæžãããä¿å®æ§ãåäžãããããšãã§ããŸãã
- ãã¡ã€ã³åºæã®ã¢ãµãŒã·ã§ã³ïŒ ã«ã¹ã¿ã ãããã£ãŒã䜿çšãããšããã¡ã€ã³ã«ç¹åããã¢ãµãŒã·ã§ã³ãäœæã§ãããã¹ããããé¢é£æ§ãé«ãæå³ã®ãããã®ã«ãªããŸãã
- ã³ã©ãã¬ãŒã·ã§ã³ã®åŒ·åïŒ ã«ã¹ã¿ã ãããã£ãŒã¯ãã¹ããã©ã¯ãã£ã¹ã®äžè²«æ§ãä¿é²ããããŒã ããã¹ãã¹ã€ãŒãã§ååãããããªããŸãã
Jestèšå®ãšã«ã¹ã¿ã ãããã£ãŒã®ãã¹ããã©ã¯ãã£ã¹
Jestèšå®ãšã«ã¹ã¿ã ãããã£ãŒã®å¹æãæå€§åããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ãèæ ®ããŠãã ããïŒ
- èšå®ã¯ã·ã³ãã«ã«ä¿ã€ïŒ äžèŠãªèšå®ã¯é¿ããŠãã ãããå¯èœãªéãJestã®ãŒãã³ã³ãã£ã®ã¥ã¬ãŒã·ã§ã³ã®ããã©ã«ããæŽ»çšããŸãããã
- ãã¹ããã¡ã€ã«ãæŽçããïŒ ãã¹ããã¡ã€ã«ã«äžè²«ããåœåèŠåãæ¡çšãããããžã§ã¯ãæ§é å ã§è«ççã«æŽçããŸãã
- æç¢ºã§ç°¡æœãªã«ã¹ã¿ã ãããã£ãŒãäœæããïŒ ã«ã¹ã¿ã ãããã£ãŒãçè§£ããããä¿å®ããããããšã確èªããŠãã ãããã¢ãµãŒã·ã§ã³ã倱æããçç±ãæç¢ºã«èª¬æããã圹ç«ã€ãšã©ãŒã¡ãã»ãŒãžãæäŸããŸãããã
- ã«ã¹ã¿ã ãããã£ãŒèªäœããã¹ãããïŒ ã«ã¹ã¿ã ãããã£ãŒãæ£ããæ©èœããŠããããšã確èªããããã«ããããèªäœã®ãã¹ããäœæããŸãã
- ã«ã¹ã¿ã ãããã£ãŒãææžåããïŒ ä»ã®éçºè ããããã®äœ¿ç𿹿³ãçè§£ã§ããããã«ãã«ã¹ã¿ã ãããã£ãŒã®æç¢ºãªããã¥ã¡ã³ããæäŸããŸãã
- ã°ããŒãã«ãªã³ãŒãã£ã³ã°æšæºã«åŸãïŒ å Žæã«é¢ä¿ãªãããã¹ãŠã®ããŒã ã¡ã³ããŒéã§ã³ãŒãã®å質ãšä¿å®æ§ã確ä¿ããããã«ã確ç«ãããã³ãŒãã£ã³ã°æšæºãšãã¹ããã©ã¯ãã£ã¹ãéµå®ããŸãã
- ãã¹ãã§ããŒã«ãªãŒãŒã·ã§ã³ãèæ ®ããïŒ ãã±ãŒã«åºæã®ãã¹ãããŒã¿ã䜿çšããããi18nçšã®ã«ã¹ã¿ã ãããã£ãŒãäœæãããããŠãç°ãªãèšèªèšå®ã§ã¢ããªã±ãŒã·ã§ã³ãé©åã«æ€èšŒããŸãã
çµè«ïŒJestã«ããä¿¡é Œæ§ã®é«ãJavaScriptã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯
Jestã¯ãJavaScriptã¢ããªã±ãŒã·ã§ã³ã®å質ãšä¿¡é Œæ§ãå€§å¹ ã«åäžãããããšãã§ããã匷åã§å€æ©èœãªãã¹ããã¬ãŒã ã¯ãŒã¯ã§ããJestã®èšå®ããã¹ã¿ãŒããã«ã¹ã¿ã ãããã£ãŒãäœæããããšã§ããããžã§ã¯ãã®ç¹å®ã®ããŒãºã«åãããŠãã¹ãç°å¢ã調æŽãããã衚çŸåè±ãã§ä¿å®ãããããã¹ããäœæãã倿§ãªç°å¢ããŠãŒã¶ãŒããŒã¹ã§ã³ãŒããæåŸ ã©ããã«åäœããããšã確èªã§ããŸããå°èŠæš¡ãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŠããå Žåã§ããå€§èŠæš¡ãªãšã³ã¿ãŒãã©ã€ãºã·ã¹ãã ãæ§ç¯ããŠããå Žåã§ããJestã¯ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®å ç¢ã§ä¿¡é Œæ§ã®é«ããœãããŠã§ã¢ãæ§ç¯ããããã«å¿ èŠãªããŒã«ãæäŸããŸããJestãåãå ¥ããJavaScriptã®ãã¹ããã©ã¯ãã£ã¹ãæ°ããªé«ã¿ãžãšåŒãäžããã¢ããªã±ãŒã·ã§ã³ãäžçäžã®ãŠãŒã¶ãŒãæºè¶³ãããããã«å¿ èŠãªåºæºãæºãããŠãããšç¢ºä¿¡ããŠãã ããã